home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / paolib / key.c < prev    next >
Text File  |  1991-10-18  |  4KB  |  137 lines

  1. /* << High C V1.4 & 386ASM V2.0 >> ********************************************
  2. **
  3. **    キーボード インターフェース ルーチン
  4. **
  5. **    1991.03.22 : CREATE
  6. **    1991.03.23 : FINISH
  7. **
  8. **    < History >
  9. **    1991.03.22 : CREATE
  10. **    1991.04.28 : 清書
  11. **
  12. **    < note > : TABS = 4
  13. **
  14. **    ☆ 注意 ☆
  15. **     FMC関数ライブラリを使用しているので,link時にFMC関数ライブラリと一緒にリンクする
  16. **    必要があります.
  17. **
  18. **    Programmed by Y.Hirata ( Nifty ID : NAB03321 )
  19. **
  20. ******************************************************************************/
  21.  
  22. #include <fmc.h>
  23. #include "hc.h"
  24.  
  25. /********************************  キー ON チェック  *******************************/
  26. int KEY_test( char *matrix,char keyadrs )
  27. /*=============================================================================
  28. **    キーマトリクス中で、指定されたキーアドレスのキーが押されているかどうかチェックする.
  29. **
  30. **    < INPUT  > : キーマトリクス情報 , キーアドレス
  31. **    < OUTPUT > : なし
  32. **    < RETURN > : キーON ならば 真値 , キーOFF ならば 偽値.
  33. =============================================================================*/
  34. {
  35.     unsigned char    testbit ;
  36.     int        c ;
  37.     int        byteoff ;
  38.  
  39.     testbit = 0x01 ;
  40.     for ( c=0; c<(keyadrs%8); c++ ) testbit <<= 1 ;
  41.     byteoff = keyadrs / 8 ;
  42.     if ( (matrix[byteoff] & testbit) == testbit ) return( TRUE ) ;
  43.  
  44.     return( FALSE ) ;
  45. }
  46.  
  47. /*******************************  キーMAKE 待ち  *******************************/
  48. void KEY_make( char keyadrs )
  49. /*=============================================================================
  50. **    指定されたキーアドレスのキーが押されるまで待つ.
  51. **
  52. **    < INPUT  > : キーアドレス
  53. **    < OUTPUT > : なし
  54. **    < RETURN > : なし
  55. =============================================================================*/
  56. {
  57.     char    matrix[16] ;
  58.  
  59.     do {
  60.         KYB_clrbuf() ;
  61.         KYB_matrix( matrix ) ;
  62.     } while ( !KEY_test( matrix,keyadrs ) ) ;
  63. }
  64.  
  65. /******************************  キーBREAK 待ち  *******************************/
  66. void KEY_break( char keyadrs )
  67. /*=============================================================================
  68. **    指定されたキーアドレスのキーが放されるまで待つ.
  69. **
  70. **    < INPUT  > : キーアドレス
  71. **    < OUTPUT > : なし
  72. **    < RETURN > : なし
  73. =============================================================================*/
  74. {
  75.     char    matrix[16] ;
  76.  
  77.     do {
  78.         KYB_clrbuf() ;
  79.         KYB_matrix( matrix ) ;
  80.     } while ( KEY_test( matrix,keyadrs ) ) ;
  81. }
  82.  
  83. /*******************************  キー押下チェック  ********************************/
  84. int KEY_hitchk( void )
  85. /*=============================================================================
  86. **    キーボードが押されたかどうかチェックする.
  87. **
  88. **    < INPUT  > : なし
  89. **    < OUTPUT > : なし
  90. **    < RETURN > : キー入力ありならば 真値 , なしならば 偽値.
  91. **
  92. **    キーマトリクスでチェックしているために、キーバッファには影響されず,この関数が呼ばれた時点
  93. **    のキー押下状態を返している点に注意.
  94. =============================================================================*/
  95. {
  96.     char    matrix[16] ;
  97.     char    keyon ;
  98.     int        c ;
  99.  
  100.     KYB_matrix( matrix ) ;
  101.  
  102.     keyon = FALSE ;
  103.     for ( c=0; c<16; c++ ) {
  104.         if ( matrix[c] ) {
  105.             keyon = TRUE ;
  106.             break ;
  107.         }
  108.     }
  109.  
  110.     return( keyon ) ;
  111. }
  112.  
  113. /****************************  キー押下チェック(マトリクス)  ****************************/
  114. int KEY_matrix_check( char *matrix )
  115. /*=============================================================================
  116. **    キーマトリクス中に押されたキーがあるかどうかチェックする.
  117. **
  118. **    < INPUT  > : キーマトリクス情報
  119. **    < OUTPUT > : なし
  120. **    < RETURN > : キー入力ありならば 真値 , なしならば 偽値.
  121. =============================================================================*/
  122. {
  123.     char    keyon ;
  124.     int        c ;
  125.  
  126.     keyon = FALSE ;
  127.     for ( c=0; c<16; c++ ) {
  128.         if ( matrix[c] ) {
  129.             keyon = TRUE ;
  130.             break ;
  131.         }
  132.     }
  133.  
  134.     return( keyon ) ;
  135. }
  136.  
  137.